package com.knife.poi.annotation;

import com.knife.poi.render.DefaultValueRender;
import com.knife.poi.render.ValueRenderer;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author tianhao.luo@hand-china.com
 * @version 1.0
 * @date 2022年05月11日 星期三 11:45 上午
 * @description
 * @since 1.0
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelColumn {

    /**
     * 列名
     */
    String name();

    /**
     * 单元格水平格式
     */
    HorizontalAlignment horizontalAlignment() default HorizontalAlignment.CENTER;

    /**
     * 单元格垂直格式
     */
    VerticalAlignment verticalAlignment() default VerticalAlignment.CENTER;

    /**
     * 标题验收
     */
    HSSFColor.HSSFColorPredefined titleBackGround() default HSSFColor.HSSFColorPredefined.PALE_BLUE;

    /**
     * 列宽度
     */
    int width() default 15;

    /**
     * 列值可能需要转化
     */
    String pattern() default "";


    /**
     * 数据渲染器，根据需求自行实现渲染器，设置Cell数据时会通过该渲染器来渲染数据和类型。
     *
     * <pre> example:
     *  public static class ExampleRenderer implements ValueRenderer {
     *
     *      public Object render(Object value, Object data) {
     *          ExampleDTO dto = (ExampleDTO) data;
     *          return "template name = " + dto.name;
     *      }
     *  }
     * </pre>
     */
    Class<? extends ValueRenderer> renderer() default DefaultValueRender.class;
}
